Programmable integrated circuits (e.g., programmable logic devices, field programmable gate arrays (FPGAs), etc.) can include a dynamic region (e.g., programmable logic or configurable hardware elements) and a static region (e.g., non-programmable circuitry). Often the static region includes circuitry used to access PCIe communication interfaces and off-chip memory while the dynamic region includes programmable circuitry that can be customized to perform a user task.
Debug and profile circuitry (e.g., debug and profile monitors) which can include counters and traces are typically disposed in the static region. As such, the debug circuitry is not customizable by the user. The debug circuitry takes up valuable space in the static region and may include too much, or too little, circuitry for monitoring the user-defined circuitry in the dynamic region.